package de.mnit.schnipsel.div;

import java.io.OutputStream;
import java.io.UnsupportedEncodingException;

import de.mnit.basis.crypt.JavaBase64;
import de.mnit.basis.daten.struktur.S_Folge;
import de.mnit.basis.daten.struktur.tabelle.S_Tabelle;
import de.mnit.basis.fehler.Fehler;
import de.mnit.basis.fehler.system.F_Sys_InOut;
import de.mnit.basis.xml.XMLAusgabe;
import de.mnit.schnipsel.db.DBManager;

/**
 * @author Michael Nitsche
 * 23.06.2010	Erstellt
 * 19.10.2010	Angepasst an neue DB-Struktur
 */
public class XMLExport {

	public void generieren(OutputStream stream) {
		S_Tabelle<String> baum=DBManager.baum().gTabExport();
		S_Tabelle<String> schnipsel=DBManager.schnipsel().gTabExport();
		generieren(baum, schnipsel, stream);
//		Ausgabe.streamText()
	}

	private void generieren(S_Tabelle<String> baum, S_Tabelle<String> schnipsel, OutputStream stream) {
		try {
			XMLAusgabe xml=new XMLAusgabe(stream);
			xml.oeffnen("schnipsel");

			xml.oeffnen("export");
			xml.attribut("version", "2");

			xml.oeffnen("tree");
			for(S_Folge<String> f : baum) {
				xml.oeffnen("item");
				xml.attribut(		"id", 		f.gib(1));
				xml.attributNull(	"above",	f.gib(2));
				xml.attribut(		"title", 	f.gib(3));
				xml.attribut(		"crypt",	f.gib(4));
				xml.attribut(		"open",		f.gib(5));
				xml.attribut(		"order",	f.gib(6));
				xml.schliessen();
			}
			xml.schliessen();

			for(S_Folge<String> f : schnipsel) {
				String text=f.gib(5);
//				if(text.charAt(text.length()-1)=='\n')
//					text+='\n';
				text=JavaBase64.verschluesseln(text.getBytes());
				try {
					text=new String(text.getBytes("US-ASCII"));
				} catch (UnsupportedEncodingException e) {
					Fehler.zeig(e);
				}

				xml.oeffnen("item");
				xml.attribut(		"id", 			f.gib(1));
				xml.attribut(		"create",		f.gib(2));
				xml.attribut(		"change", 		f.gib(3));
				xml.attribut(		"title",		f.gib(4));
				//5=Text,6=Format
				xml.attributNull(	"clicks",		f.gib(7));
				xml.attributNull(	"tree", 		f.gib(8));
				xml.attribut(		"trash", 		f.gib(9));
				xml.attribut(		"crypt_content",f.gib(10));
				xml.attributNull(	"expire",		f.gib(11));

				xml.oeffnen("text");
				xml.text(text); //5
				xml.schliessen();

				xml.oeffnen("format");
				xml.text(f.gib(6));
				xml.schliessen();

				xml.schliessen();
			}

			xml.schliessen(); //export
			xml.schliessen(); //schnipsel
			xml.fertig();
		}
		catch(F_Sys_InOut e) {
			Fehler.zeig(e);
		}
	}
}
